# deploy.sh --user username --host 1.1.1.1

####################################################################################################
# Перебирем все аргументы и парсим их
####################################################################################################
while [[ $# -gt 0 ]]
do
  # считываем значение аргумента
  KEY="$1"
  case "$KEY" in
          --branch|-b)    # имя ветки
            BRANCH=$2     # считываем имя ветки
            shift;shift;; # пропускаем из массива аргументов два значения -b и BRANCHNAME
          --prod)         # флаг, который отвечает за PRODUCTION deployment
            IS_PROD="true"
            shift;;       # пропускаем из массива аргументов флаг --prod
          --force|-f)     # флаг, который отвечает за force checkout (с потерей изменений)
            FORCE="-f"
            shift;;       # пропускаем из массива аргументов флаг --force
          --user|-u)      # имя пользователя на удаленной машине
            USER=$2
            shift;shift;; # пропускаем из массива аргументов два значения -u и USER
          --host|-h)
            HOST=$2
            shift;shift;; # пропускаем из массива аргументов два значения -h и адрес
          --remote-dir|-rdir) # путь в котором лежит реп
            PROJECT_PATH=$2
            shift;shift;; # пропускаем из массива аргументов два значения -h и адрес
         *)
  esac
done

# Если в аргументах не указана ветка, то берем текущую.
if [ -z ${BRANCH} ]; then
  BRANCH=$(git rev-parse --abbrev-ref HEAD)
fi

BUILD_COMMAND="docker-compose up -d --build && docker image prune -f"

CMD="
  pwd && 
  cd ${PROJECT_PATH} && pwd && echo &&
  echo 'GIT UPDATE' && echo &&
  git fetch --all --prune &&
  git checkout ${FORCE} origin/${BRANCH} &&
  echo 'BUILD' && echo &&
  ${BUILD_COMMAND}
"

# Отображаем сфоррмиорванную команду
echo
echo $USER@$HOST
echo 
echo "Command to execute"
echo "$CMD"

# Выводим запрос о подтверждении деплоя
read -p "Do you wish to deploy? " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
  # Дропаем если ответ не начинается с Y или y
  exit 1
fi

# Ну раз согласились, то деплоим
echo "Go ..."

#try
{
  ssh $USER@$HOST "${CMD}"
} || {
  echo "Fail"
}
